package concoursbelote;

/**
 * 
 * @author Shehu
 *
 */
public class Fournisseur
{
	//*********************************************************
	//			ATTRIBUTS
	//*********************************************************
	
	private String nomFournisseur = new String();
	private Integer tempsLivraison = new Integer(0);
	private String boissonALivrer = new String();
	private Integer quantite = new Integer(0);
	private Integer tourBoucleEnCours = new Integer(0);

	
	//*********************************************************
	//			CONSTRUCTEURS
	//*********************************************************
	
	/**
	 * Permet de contruire un fournisseur
	 * @author Shehu
	 */
	public Fournisseur(String nomFournisseur, Integer tempsLivraison, String boissonALivrer, Integer quantite, Integer toursEnCours) 
	{
		this.nomFournisseur = nomFournisseur;
		this.tempsLivraison = tempsLivraison;
		this.boissonALivrer = boissonALivrer;
		this.quantite = quantite;
		this.tourBoucleEnCours = toursEnCours;
	}
	

	//*********************************************************
	//			GETTEURS
	//*********************************************************
	public String getNomFournisseur() 
	{
		return nomFournisseur;
	}
	public Integer getTempsLivraison() 
	{
		return tempsLivraison;
	}
	public String getBoissonALivrer() 
	{
		return boissonALivrer;
	}
	public Integer getQuantite() 
	{
		return quantite;
	}
	public Integer getTourBoucleEnCours() 
	{
		return tourBoucleEnCours;
	}

	//*********************************************************
	//			SETTEURS
	//*********************************************************
	public void setTempsLivraison(Integer tempsLivraison) 
	{
		this.tempsLivraison = tempsLivraison;
	}
	public void setTourBoucleEnCours(Integer tourBoucleEnCours) 
	{
		this.tourBoucleEnCours = tourBoucleEnCours;
	}
	
	//*********************************************************
	//			METHODS
	//*********************************************************

	/**
	 * Instancie un nouveau fournisseur pour récupérer la commande faite
	 * @author Guillaume
	 * @param quantite
	 * @param indexBoisson
	 */
	public static void recevoirCommande(int quantite, int indexBoisson)
	{
		Fournisseur fournisseur = new Fournisseur("Fournir_" + Administration.currentBar.mesBoissons.get(indexBoisson).getNomBoisson(), 3, Administration.currentBar.mesBoissons.get(indexBoisson).getNomBoisson(), quantite, 1);
		Administration.currentBar.mesFournisseurs.add(fournisseur);
		fournisseur.parler(fournisseur.getBoissonALivrer(), fournisseur.getQuantite());
	}
	
	
	/**
	 * Le fournisseur confirme la commande passée
	 * @author Guillaume
	 * @param inom_boisson
	 * @param quantite
	 */
	public void parler(String nomBoisson, int quantite)
	{
		System.out.println("Commande bien reçu. Une livraison de " + quantite + " de " + nomBoisson + " sera effectué dans 3 jours");
	}
	
	/**
	 * Le fournisseur livre les boissons commandées et donne le prix à la patronne
	 * @author Guillaume
	 * @param indexFournisseur
	 */
	public void livrer(int indexFournisseur)
	{
		Double prix = new Double(0);
		Integer indexBoisson = new Integer(0);
		@SuppressWarnings("unused")
		Fournisseur temp = Administration.currentBar.mesFournisseurs.get(indexFournisseur);
		System.out.println("<Fournisseur> Voici votre livraison. " + Administration.currentBar.mesFournisseurs.get(indexFournisseur).getQuantite() + " " + Administration.currentBar.mesFournisseurs.get(indexFournisseur).getBoissonALivrer());
		for(int i=0; i<Administration.currentBar.mesBoissons.size(); i++)
		{
			if(Administration.currentBar.mesBoissons.get(i).getNomBoisson().equalsIgnoreCase(Administration.currentBar.mesFournisseurs.get(indexFournisseur).getBoissonALivrer()))
			{
				indexBoisson = i;
				prix = Administration.currentBar.mesFournisseurs.get(indexFournisseur).getQuantite() * Administration.currentBar.mesBoissons.get(i).getPrixAchatBouteille();
				Administration.commandePassee[i][1] = "non";
				break;
			}
		}
		System.out.println("<Fournisseur> Cela vous fait: " + prix + " €");
		Administration.currentBar.getPatronne().payer(prix);
		Administration.currentBar.getBarman().remplirLesStocks(Administration.currentBar.mesFournisseurs.get(indexFournisseur).getQuantite(), indexBoisson);
		System.out.println("<Fournisseur> Merci à vous, bonne journée");
		Administration.currentBar.mesFournisseurs.remove(indexFournisseur);
		temp  = null;
	}
	
	/**
	 * Vérifie si le temps de livraison est à 0. Si oui, la livraison des boissons s'effectuent sinon, elle ne fait rien
	 * @author Guillaume
	 * @param indexFournisseur
	 */
	public void livraisonTerminee(int indexFournisseur)
	{
		if(Administration.currentBar.mesFournisseurs.get(indexFournisseur).getTempsLivraison() == 0)
		{
			Administration.currentBar.mesFournisseurs.get(indexFournisseur).livrer(indexFournisseur);
		}
	}
	
	/**
	 * Prépare la livraison du fournisseur. regarde le temps restant avant d'arriver au bar pour livrer la commande
	 * @author Guillaume
	 */
	public static void preparationLivraison()
	{
		for( int i=0; i<Administration.currentBar.mesFournisseurs.size(); i++)
		{
			Administration.currentBar.mesFournisseurs.get(i).setTourBoucleEnCours(Administration.currentBar.mesFournisseurs.get(i).getTourBoucleEnCours() + 1);
			if(Administration.currentBar.mesFournisseurs.get(i).getTourBoucleEnCours() == 10)
			{
				Administration.currentBar.mesFournisseurs.get(i).setTourBoucleEnCours(1);
				Administration.currentBar.mesFournisseurs.get(i).setTempsLivraison(Administration.currentBar.mesFournisseurs.get(i).getTempsLivraison() - 1);
			}
			Administration.currentBar.mesFournisseurs.get(i).livraisonTerminee(i);
		}
	}
	
}
